Step Functions에 대해 정리하고 사용해봤습니다.
안녕하세요, 임채정입니다.
이번 블로그에서는 Step Functions 서비스에 대해 알아보고 사용해봤습니다.
아젠다
- Step Functions 란
- 실제로 해보기
- 마무리
1. Step Functions 란
- 워크플로를 정의하고 실행 및 관리할 수 있는 관리형 서비스
- AWS 의 각 서비스를 구성 요소로 워크플로를 정의
- 다양한 작업으로 구성된 복잡한 워크플로를 쉽게 정의가능
- 예) 이미지를 여러 형식으로 변환하고 크기를 조정한 후 Amazon Rekognition으로 분석하는 프로세스는 각 작업을 Lambda 함수로 작성하고 워크플로로 정의하여 쉽게 수행 가능
사용법
Step Functions 은 시각적으로 워크플로를 작성할 수도 있고
코드로도 작성할 수 있습니다.
시각적으로 작성하는 것은 간단하게 할 수 있지만 한 번 코드로 작성해두면 따로 작성할 필요없이 바로 복사해서 작성할 수도 있기때문에 각각의 방법은 장단점이 있는 것같습니다.
자신에게 맞는 방법으로 Step Functions 을 사용해봅시다!
2. 실제로 해보기
이번에는 실제로 Step Functions 을 사용해보겠습니다.
실제로 작성할 Step Functions 은 다음과 같습니다.
시작하면 람다 함수를 실행해서 나오는 결과를 통해 Choice State
에서 Good Result
혹은 Not Good Result
으로 이동하는 형태입니다.
람다 함수
먼저 Step Functions 의 상태 머신이 실행되면 가장 먼저 실행할 람다 함수를 작성하겠습니다.
람다함수는 간단하게 입력되는 값을 Lambda result =
문자열에 붙여 결과로 받아오겠습니다.
exports.handler = (event, context, callback) => { callback(null, "Lambda result = " + event.result); };
실제로 작성한 함수의 결과를 보기 위해 새로운 이벤트를 작성해줍니다.
작성시 입력할 값은 코드에 결과가 잘 나올 수 있도록 다음과 같이 변경했습니다.
결과는 다음과 같이 잘 나왔습니다.
Test Event Name FunctionTest Response "Lambda result = fail" Function Logs START RequestId: 92bd6fac-aff0-4c54-915e-ad3186977a3f Version: $LATEST END RequestId: 92bd6fac-aff0-4c54-915e-ad3186977a3f REPORT RequestId: 92bd6fac-aff0-4c54-915e-ad3186977a3f Duration: 101.34 ms Billed Duration: 102 ms Memory Size: 128 MB Max Memory Used: 56 MB Request ID 92bd6fac-aff0-4c54-915e-ad3186977a3f
Step Functions
그럼 이번에는 Step Functions 의 상태 머신을 작성하겠습니다.
코드로 워크플로 작성하기
를 선택하고 유형은 표준
을 선택합니다.
그 다음 상태 머신을 정의하는 부분에 코드를 붙여넣어두고 새로고침 버튼을 눌러주면 다음과 같이 워크플로를 시각적으로도 확인할 수 있습니다.
이 때, 람다 함수가 들어갈 Task 부분의 Resource 에 림다 함수의 ARN을 복사에서 붙여넣습니다.
또한, good
이라는 단어가 들어가면 Good Result
, 들어가지 않으면 Not Good Result
가 되도록 작성해줬습니다.
{ "Comment": "example of the Amazon States Language using Pass states", "StartAt": "Invoke Lambda function", "States": { "Invoke Lambda function": { "Type": "Task", "Resource": "arn:aws:lambda:ap-northeast-1:XXXXXXXXXXXX:function:stepFunctionLambda", "InputPath": "$", "Next": "Choice State" }, "Choice State": { "Type": "Choice", "Choices": [ { "Variable": "$", "StringMatches": "*good*", "Next": "Good Result" } ], "Default": "Not Good Result" }, "Good Result": { "Type": "Pass", "Result": "Lambda Function's result is good", "End": true }, "Not Good Result": { "Type": "Fail", "Error": "ErrorCode", "Cause": "Lambda Function's result is not good" } } }
그 후 세부 정보 지정 설정부분은 전부 기본 설정으로 해두고 작성을 완료합니다.
그러면 성공적으로 Step Functions 의 상태머신을 작성 했습니다.
결과 테스트
이번에는 테스트를 해보겠습니다.
만들어둔 상태 머신의 실행 시작
을 클릭합니다.
실행할 때 입력값으로 good
를 넣어주겠습니다.
그러면 결과는 성공이 나오고
자세히 살펴보면 람다 함수에서는 입력값이 good
이 들어가서
출력값으로 "Lambda result = good"
이 나왔습니다.
그게 Choice State
에서 문장에 good
이 들어가 있기 때문에 Good Result
로 이동합니다.
Good Result
의 결과를 자세히 보면
입력값인 "Lambda result = good"
에 good
이라는 단어가 포함되어 있어 출력값으로 "Lambda Function's result is good"
가 된 것으로 상태가 성공된 것을 확인할 수 있습니다.
또한 이벤트 내역을 통해 어떤 이벤트가 발생했는지도 확인할 수 있습니다.
그럼 아까는good
을 넣어 실행했다면 이번에는 다른 입력값인 bed
를 넣어 실행해보겠습니다.
결과는 실패가 되었습니다.
아까와 달리 입력값이 bed
이기 때문에 람다 함수의 결과도 다르게 출력됩니다.
그 때문에 Choice State
에서 Not Good Result
로 이동합니다.
그래서 결과는 실패하고 에러가 나왔습니다.
실패한 결과에 대한 이벤트 또한 아까와 같이 이벤트 실행 내역에서 확인 할 수 있습니다.
3. 마무리
이번에는 Step Functions 에 대해 정리해봤습니다.
이번 블로그에서는 간단하게 실행을 해봤지만 많은 상태(State)을 사용해서 더 하고 복잡하고 상태 머신을 사용할 수 있기 때문에 다양한 상태(State)를 활용해서 Step Functions 사용할 수 있도록 공부하는 것도 재미있을 것같습니다!